use std::env;
use std::error::Error;

mod browser;
mod feature_tester;

use eframe::egui::{self, Context, FontData, FontDefinitions, FontFamily};

fn main() -> Result<(), Box<dyn Error>> {
    // 初始化日志系统
    env_logger::init();

    // 解析命令行参数
    let args: Vec<String> = env::args().collect();

    // 检查是否有--test-features参数
    if args.iter().any(|arg| arg == "--test-features") {
        // 运行特性测试器
        feature_tester::run_feature_tester()?;
    } else {
        // 运行常规浏览器
        // 错误1：browser.run().await? 不能使用await，因为这不是异步函数
        // 错误2：Browser::new()可能没有实现
        println!("常规浏览器启动 (尚未实现)");

        // 临时注释掉有问题的代码
        // let browser = browser::Browser::new()?;
        // browser.run().await?;
    }

    Ok(())
}

/// 设置 egui 支持中文字体
pub fn set_chinese_font(ctx: &Context) {
    let mut fonts = FontDefinitions::default();

    // 移除尝试加载内嵌字体的逻辑，直接使用系统字体
    load_system_font(&mut fonts);

    ctx.set_fonts(fonts);
}

// 加载系统默认中文字体
fn load_system_font(fonts: &mut FontDefinitions) {
    #[cfg(target_os = "windows")]
    {
        // Windows 系统默认中文字体
        if let Ok(font_data) = std::fs::read("C:\\Windows\\Fonts\\msyh.ttc") {
            fonts.font_data.insert(
                "microsoft_yahei".to_owned(),
                FontData::from_owned(font_data),
            );
        }
    }

    #[cfg(target_os = "macos")]
    {
        // 在macOS上添加系统内置的中文字体
        let macos_font_paths = [
            "/System/Library/Fonts/PingFang.ttc",
            "/Library/Fonts/Microsoft/SimHei.ttf",
            "/System/Library/Fonts/STHeiti Light.ttc",
            "/System/Library/Fonts/AppleSDGothicNeo.ttc",
        ];

        for path in &macos_font_paths {
            if let Ok(font_data) = std::fs::read(path) {
                let font_name = path.split('/').last().unwrap_or("chinese_font");
                fonts
                    .font_data
                    .insert(font_name.to_owned(), FontData::from_owned(font_data));

                fonts
                    .families
                    .get_mut(&FontFamily::Proportional)
                    .unwrap()
                    .insert(0, font_name.to_owned());

                // 对于等宽字体也使用同样的中文字体
                fonts
                    .families
                    .get_mut(&FontFamily::Monospace)
                    .unwrap()
                    .insert(0, font_name.to_owned());

                // println!("成功加载中文字体: {}", path);
                break;
            }
        }
    }

    #[cfg(target_os = "linux")]
    {
        // Linux 上尝试加载常见的中文字体
        let font_paths = [
            "/usr/share/fonts/noto/NotoSansCJK-Regular.ttc",
            "/usr/share/fonts/wqy-microhei/wqy-microhei.ttc",
            "/usr/share/fonts/droid/DroidSansFallbackFull.ttf",
        ];

        for path in &font_paths {
            if let Ok(font_data) = std::fs::read(path) {
                let font_name = path.split('/').last().unwrap_or("chinese_font");
                fonts
                    .font_data
                    .insert(font_name.to_owned(), FontData::from_owned(font_data));

                fonts
                    .families
                    .get_mut(&FontFamily::Proportional)
                    .unwrap()
                    .insert(0, font_name.to_owned());

                break; // 找到一个可用字体就停止
            }
        }
    }
}
